package cn.centec.core.util;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.apache.commons.lang3.StringUtils;

import java.util.List;

/**
 * JSON转换工具
 *
 * @author 延晓磊
 *
 * @since 2017年7月10日
 */
public final class JsonUtil {

	private JsonUtil(){}

	/**
	 * 通用序列化格式-不保留NULL属性
	 */
	public static final SerializerFeature[] FEATURES = new SerializerFeature[] {
			// 不使用引用符，便于JS读取
			SerializerFeature.DisableCircularReferenceDetect,
			// 日期格式化：yyyy-MM-dd HH:mm:ss
			SerializerFeature.WriteDateUseDateFormat
		};

	
	/**
	 * 功能描述：转换对象为JSON串
	 *
	 * @param obj
	 * @return
	 * 
	 * @author yxl
	 *
	 * @since 2017年3月10日
	 */
	public static String toString(Object obj){
		// 空
		if (obj == null) {
			return "";
		}
		// 字符串
		if (obj instanceof String) {
			return (String)obj;
		}
		// 其它类型
		return JSON.toJSONString(obj,FEATURES);
	}

	/**
	 * 是否为空
	 *
	 * @param  str
	 * @return true = null,'','{}'
	 *
	 * @author 延晓磊
	 * @since 2022年11月04日
	 */
	public static boolean isEmpty(String str){
		return StringUtils.isBlank(str) || str.length() <= 2;
	}
	
	/**
	 * JSON串转换为JSONObject(Map<String, Object>)
	 * 
	 * @param json
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年11月24日
	 */
	public static JSONObject parseObject(String json){
		return JSON.parseObject(json);
	}

	/**
	 * 
	 * 功能描述：转换JSON串为对象
	 *
	 * @param json
	 * @param clazz
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年4月27日
	 */
	public static <T> T parse(String json, Class<T> clazz){
		return JSON.parseObject(json, clazz);
	}
	
	/**
	 * 功能描述：转换JSON串为对象集合
	 *
	 * @param json
	 * @param clazz	集合元素的类型
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2017年4月27日
	 */
	public static <T> List<T> parseList(String json, Class<T> clazz){
		return JSON.parseArray(json, clazz);
	}

}
